flask Flask |
您所在的位置:网站首页 › flask login session一直操作页面也会过期 › flask Flask |
一、继承 UserMixin 类
Flask 项目可以使用 Flask-Login 插件来实现登录功能,这是一个被广泛使用的优质第三方库。 登录功能设计用户表,我们要使用 Flask-Login 就需要让 User 映射类继承 UserMixin 类。修改 models.py 如下: from flask_login import UserMixin class User(Base, UserMixin): ...继承 UserMixin 是干嘛呢?我们看下源码,这个类定义在 flask_login.mixins 模块中: 所以继承了 UserMixin 类后的 User 映射类就多了这几个属性和方法。 二、login_user 源码分析在 flask_login.utils 模块中定义了 login_user 函数: ![]() 第 169 行代码,current_app 就是应用对象,它的 login_manager 属性在前面的步骤中已经分析过,就是登录管理对象,LoginManager 类的实例。这个实例的 id_attribute 属性值是变量 ID_ATTRIBUTE ,这个变量来自配置文件 flask_login.config 模块: 紧接着,第 170 行将这个字符串又赋值给 session 的 _user_id 属性。 三、session源码分析这里要提到 session 了。在课程的第一阶段最后一个实验「Flask 框架的栈与上下文对象」中,我们提到过 session 是一个请求上下文代理对象,它其实是 LocalProxy 类的实例。我们完全可以把它看作是请求上下文对象的 session 属性值,也就是定义在 flask.sessions 模块中的 SecureCookieSession 类的实例。 首先我们看下定义请求上下文对象的 session 属性的代码,它们在 flask.ctx 模块中 RequestContext 类的 push 方法中: 第 343 行的 request.cookies 属性是字典对象,app.session_cookie_name 是固定值 'session' ,所以 val 的值就是字典中 key 为 'session' 对应的 value ,也就是令牌。令牌也叫做加密签名,它是一个不定长的字符串。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |